/*  Universidad del Valle de Guatemala
 *  Algoritmos y Estructura de datos
 * 
 * Carlos Sagastume, 12113
 * Rodimiro Castañeda, 12122
 * 
 * Descripcion:
 *      Programa que realiza la implementacion de un arbol
 * binario por medio de nodos los cuales entre sus atributos tiene
 * solamente referencia a la derecha (right) o izquierda (left)
 * Se realiza la implementaicon de Prioriti Queues por medio de Heaps en la calse
 * HeapClass.
 * 
 * funcionalidad:
 *      el programa permite el ingreso de texto, que luego es ordenado
 * en un arbol binario de Huffman, asignandole de esta forma un codigo segun
 * su posicion en el arbol.
 */

package Hoja07;

import java.util.*;
public class main {
    public static void main(String[] args) {
        String ingreso;
        Scanner scan = new Scanner(System.in);
        HeapClass arbol;
        Nodo hoja;
        System.out.println("Ingrese una serie de caracteres, sin espacio:");
        ingreso = scan.nextLine();
        arbol = new HeapClass(ingreso.length());
        System.out.println("");
        System.out.println("Caracter |  Frecuencia | Codigo");   
        for(int i =0; i < ingreso.length(); i++) {            
            Nodo tree = new Nodo(ingreso.charAt(i));
            hoja = arbol.remove(tree);
            if (hoja == null) {
                arbol.insert(tree);
            } else {
                hoja.incRepet();
                arbol.insert(hoja);
            }
        }
        while(arbol.getAmount() > 1) {
            Nodo ptree = new Nodo();
            int lad1, lad2;
            lad1= arbol.seeFirst().getRepet() ;
            ptree.setLeft(arbol.remove());
            lad2 = arbol.seeFirst().getRepet(); 
            ptree.setRigth(arbol.remove());
            ptree.setRepet(lad1+lad2);           
            arbol.insert(ptree);
        }
        arbol.seeFirst().route();
    }
    }